filechooserwidget: Allow keynav from the treeview to the search entry
authorTimm Bäder <mail@baedert.org>
Sun, 28 Apr 2019 09:27:42 +0000 (11:27 +0200)
committerTimm Bäder <mail@baedert.org>
Sun, 28 Apr 2019 09:27:42 +0000 (11:27 +0200)
gtk/gtkfilechooserwidget.c
gtk/ui/gtkfilechooserwidget.ui

index 81532d8164f19550b3dd554f8207398372cf9c31..efe6bae3eba15a492b6ea6d7ae02d0f953b66dcd 100644 (file)
@@ -7673,6 +7673,24 @@ list_cursor_changed (GtkTreeView          *list,
   check_preview_change (impl);
 }
 
+static gboolean
+browse_files_tree_view_keynav_failed_cb (GtkWidget        *widget,
+                                         GtkDirectionType  direction,
+                                         gpointer          user_data)
+{
+ GtkFileChooserWidget *self = user_data;
+ GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (self);
+
+ if (direction == GTK_DIR_UP && priv->operation_mode == OPERATION_MODE_SEARCH)
+   {
+     gtk_widget_grab_focus (priv->search_entry);
+
+     return TRUE;
+   }
+
+  return FALSE;
+}
+
 /* Callback used when a row in the file list is activated */
 static void
 list_row_activated (GtkTreeView          *tree_view,
@@ -8400,6 +8418,7 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class)
   gtk_widget_class_bind_template_callback (widget_class, file_list_drag_end_cb);
   gtk_widget_class_bind_template_callback (widget_class, list_selection_changed);
   gtk_widget_class_bind_template_callback (widget_class, list_cursor_changed);
+  gtk_widget_class_bind_template_callback (widget_class, browse_files_tree_view_keynav_failed_cb);
   gtk_widget_class_bind_template_callback (widget_class, filter_combo_changed);
   gtk_widget_class_bind_template_callback (widget_class, path_bar_clicked);
   gtk_widget_class_bind_template_callback (widget_class, places_sidebar_open_location_cb);
index 9ea493cec9dea6ac81abd556e2af356194dcc7cb..09fab2a02ef66ec74e258191ca1b717d57073530 100644 (file)
                                             <signal name="query-tooltip" handler="file_list_query_tooltip_cb" swapped="no"/>
                                             <signal name="row-activated" handler="list_row_activated" swapped="no"/>
                                             <signal name="cursor-changed" handler="list_cursor_changed" swapped="no"/>
+                                            <signal name="keynav-failed" handler="browse_files_tree_view_keynav_failed_cb" />
                                             <child internal-child="selection">
                                               <object class="GtkTreeSelection" id="treeview-selection2">
                                                 <signal name="changed" handler="list_selection_changed" swapped="no"/>